package main

// 来源：2022 字节青训营 进阶班算法第二题
// 题干：
// 给一个数字字符串，在字符串之间加几个点，让它可以作为一个 ip
// 如 19216811 --> 192.168.1.1
// 把所有可以得到的 ip 按照从小到大排序，按照 IP A 到 D 段排序
// 最大 255255255255 --> 255.255.255.255
// 最小 0000 --> 0.0.0.0

// 案例输入：
// 255255255255
// 案例输出：
// 255.255.255.255

// 解题思路：
// 剪枝枚举
// 先排除大于2前面的分割点的可能(ip每一个子段不能超过255)
// 然后确定三个分割点每一个点的可能范围(如第一个点一定在索引为 0, 1, 2 之间，ip 每个子段不可能是 4 位数)
// (第二个点肯定在第一个点往后移动三位可以到达的位置，反之第一个第二个点可能的位置往前移动三位就是第一个点可能的位置)
// 最后计算每一个点的范围大小，相乘就是最后可以组合的 ip 数量，写三层for遍历并插入排序
// 最后输出

func main() {
	// var strIP string
	// fmt.Scanf("%s", &strIP)
	// if strIP[0] > '2' || len(strIP) < 4 { // 排除极端情况
	// 	fmt.Println()
	// 	return
	// }
	// var dots = make(map[int]bool)
	// var first = make(map[int]struct{})
	// var second = make(map[int]struct{})
	// var third = make(map[int]struct{})
	//
	// for i := 1; i < len(strIP); i++ {
	// 	dots[i-1] = strIP[i] < '3'
	// 	if i-1 < 3 && dots[i-1] {
	// 		first[i-1] = struct{}{}
	// 	}
	// }
	// if !dots[0] && !dots[1] && !dots[2] { // 保证前三个必有一点
	// 	fmt.Println()
	// 	return
	// }
	//
	// fmt.Println(dots)
}
